package demo.memcache;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
import com.sun.java_cup.internal.internal_error;
import com.sun.org.apache.bcel.internal.generic.NEW;

public class TestMemcache {

	protected static MemCachedClient mcc = new MemCachedClient();

	static {
		String[] servers = { "127.0.0.1:11211" };

		Integer[] weights = { 3 };

		// 创建一个实例对象SockIOPool
		SockIOPool pool = SockIOPool.getInstance();

		// set the servers and the weights
		// 设置Memcached Server
		pool.setServers(servers);
		pool.setWeights(weights);

		// set some basic pool settings
		// 5 initial, 5 min, and 250 max conns
		// and set the max idle time for a conn
		// to 6 hours
		pool.setInitConn(5);
		pool.setMinConn(5);
		pool.setMaxConn(250);
		pool.setMaxIdle(1000 * 60 * 60 * 6);

		// set the sleep for the maint thread
		// it will wake up every x seconds and
		// maintain the pool size
		pool.setMaintSleep(30);

		// Tcp的规则就是在发送一个包之前，本地机器会等待远程主机
		// 对上一次发送的包的确认信息到来；这个方法就可以关闭套接字的缓存，
		// 以至这个包准备好了就发；
		pool.setNagle(false);
		// 连接建立后对超时的控制
		pool.setSocketTO(3000);
		// 连接建立时对超时的控制
		pool.setSocketConnectTO(0);

		// initialize the connection pool
		// 初始化一些值并与MemcachedServer段建立连接
		pool.initialize();

		// lets set some compression on for the client
		// compress anything larger than 64k
		mcc.setCompressEnable(true);
		mcc.setCompressThreshold(64 * 1024);
	}

	public static void bulidCache() {
		// set(key,value,Date) ,Date是一个过期时间，如果想让这个过期时间生效的话，这里传递的new Date(long
		// date) 中参数date，需要是个大于或等于1000的值。
		// 因为java client的实现源码里是这样实现的 expiry.getTime() / 1000 ，也就是说，如果
		// 小于1000的值，除以1000以后都是0，即永不过期

		for (int i = 0; i < 30000; i++) {
			mcc.set("test-" + i, new BigObject(), new Date(10)); // 十秒后过期

		}

	}

	public static void output() {
		int count = 0;
		// 从cache里取值
		for (int i = 0; i < 20000; i++) {
			BigObject value = (BigObject) mcc.get("test-" + i);
			if (value != null) {
				count++;
			}
		}
		System.out.println(count);
	}

	public static void main(String[] args) {
//		bulidCache();
		output();
	}
}
